home *** CD-ROM | disk | FTP | other *** search
/ Software Vault: The Games Collection 1 / software vault.zip / software vault / CDR10 / YICN23.ZIP / UNITS / YAKSOUND.CPP < prev    next >
C/C++ Source or Header  |  1993-01-10  |  3KB  |  114 lines

  1. #ifndef STDDEFS.H
  2. #include "stddefs.h"
  3. #endif
  4.  
  5. #include <fstream.h>
  6. #include <string.h>
  7. #include <stdlib.h>
  8. #include "yaksound.h"
  9.  
  10. #include <stdio.h>
  11. #include <io.h>
  12.  
  13. #include "sb.h"
  14.  
  15. byte * yakSample::load(char * filename)
  16. {
  17.   long miscNumber = 0;
  18.   if (sampleData)
  19.     delete sampleData;
  20.   ifstream myInStream(filename, ios::binary | ios::in);
  21.   if (myInStream)
  22.   {
  23.     myInStream.seekg(0, ios::end);
  24.     long sl = (myInStream.tellg() > 64000) ? 64000 : myInStream.tellg();
  25.     sampleData = new byte[sl];
  26.     myInStream.seekg(0);
  27.     for (long bytesLeft = sl; bytesLeft > 0;)
  28.       {
  29.     miscNumber = (bytesLeft < 32000) ? bytesLeft : 32000;
  30.     myInStream.read(sampleData, (int)miscNumber);
  31.     bytesLeft -= miscNumber;
  32.       }
  33.     sampleLength = sl;
  34.     myInStream.close();
  35.     return(sampleData);
  36.   }
  37.   else
  38.   {
  39.     sampleData = NULL;
  40.     sampleLength = 0;
  41.     return NULL;
  42.   }
  43. }
  44.  
  45. void yakSample::play(word sampleRate, word stereo, word voice, unsigned long length)
  46. {
  47.   if (length > sampleLength)
  48.     length = sampleLength;
  49.   if (length == 0)
  50.     length = sampleLength;
  51.   Sb_Init_Voice_DMA(NULL);   /* Use default interrupt handler */
  52.   Sb_Sample_Rate(sampleRate);
  53.   Sb_Voice(voice);
  54.   Sb_OutVoice_DMA(sampleData,length,stereo);
  55. }
  56.  
  57. static char far * driverMemory = NULL;
  58. static void far (*driver)() = NULL;
  59.  
  60. void CTLoad(void)
  61. {
  62.   long length;
  63.   char *sp;
  64.   char sn[129];
  65.   ifstream myInStream;
  66.   strcpy(sn, "");
  67.   sp = getenv("SOUND");
  68.   if (sp)
  69.   {
  70.      strcpy(sn,sp);
  71.      if(sn[strlen(sn)-1] != '\\')
  72.        strcat(sn, "\\");
  73.   }
  74.   strcat(sn, "drv\\CT-VOICE.DRV");
  75.   myInStream.open(sn, ios::binary);
  76.   if (!myInStream) return;
  77.   myInStream.seekg(0,ios::end);
  78.   length = myInStream.tellg(); //get length of file
  79.   myInStream.seekg(0, ios::beg);
  80.   driverMemory = new far char[(int)length + 16];
  81.   if (FP_SEG(driverMemory) != 0)
  82.     driver = (void (*)())MK_FP(FP_SEG(driverMemory) + 1, 0);
  83.   else
  84.     driver = (void (*)())driverMemory;
  85.   myInStream.read((char *)driver, (int)length);
  86.   myInStream.close();
  87. }
  88.  
  89.  
  90. int CTGetVersion(void) {_BX = 0; (*driver)(); return _AX;};
  91. void CTSetIOAddr(int base) {_BX=1; _AX=base; (*driver)();};
  92. void CTSetIRQ(int irq) {_BX=2; _AX=irq; (*driver)();};
  93. int CTInitialize(void) {_BX=3; (*driver)(); return _AX;};
  94. void CTUninstall(void) {_BX=9; (*driver)();};
  95. void CTSpeakerOn(void) {_BX=4; _AX=1; (*driver)();};
  96. void CTSpeakerOff(void){_BX=4; _AX=0; (*driver)();};
  97. void CTSetStatusWord(word * address) {_BX=5; _ES=FP_SEG(address); _DI=FP_OFF(address); (*driver)();};
  98. void CTOutputVoice(char * buffer) {_BX=6; _ES=FP_SEG(buffer); _DI=FP_OFF(buffer); (*driver)();};
  99. void CTStopVoiceProcess(void) {_BX=8; (*driver)();};
  100. int CTPauseOutputVoice(void) {_BX=10; (*driver)(); return _AX;};
  101. int CTContinueOutputVoice(void) {_BX=11; (*driver)(); return _AX;};
  102.  
  103.  
  104. //yakVoc definitions follow------------------------------------------->
  105.  
  106. void yakVoc::load(char * filename, yakLib * myYakLib)
  107. {
  108.   sampleData = (myYakLib) ? myYakLib->loadToMem(filename) : loadDosToMem(filename);
  109. }
  110.  
  111. void yakVoc::play(void)
  112. {
  113.   CTOutputVoice(sampleData + 0x1a);
  114. }